package cn.javass.dp.flyweight.example2;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class SecurityMgr {

    private static SecurityMgr securityMgr = new SecurityMgr();

    private SecurityMgr() {
    }

    public static SecurityMgr getInstance() {
        //静态不能用this
        return securityMgr;
    }

    /**
     * 运行期间，用来存放人员对应的权限 ，在web应用中 通常放到session中
     */
    private Map<String, Collection<AuthorizationModel>> map = new HashMap<>();

    /**
     * 2登录并把用户信息放入session中
     * 模拟登陆功能
     * @param user
     */
    public void login (String user) {
        Collection<AuthorizationModel> col = queryByUser(user);
        map.put(user,col);
    }

    //去session中取出用户，并且判断用户是否 又对应的权限
    public boolean hasPremit(String user, String securityEntity, String premit) {
        Collection<AuthorizationModel> col = map.get(user);
        if (col == null || col.size() == 0) {
            System.out.println("该用户没有任何权限");
            return false;
        }
        for (AuthorizationModel am : col) {
            if (am.getSecurityEntity().equals(securityEntity)
                    && am.getPremit().equals(premit))
                return true;
        }
        return false;
    }
    //1 查询数据库 把数据库数据与实体 映射
    private Collection<AuthorizationModel> queryByUser(String user) {
        Collection<AuthorizationModel> col = new ArrayList<>();
        for (String s : TestDB.colDB) {
            String ss[] = s.split(",");
            if (ss[0].equals(user)) {
                //每次都会生成新的对象 消耗内存
                AuthorizationModel am = new AuthorizationModel();
                System.out.println("am=="+am);
                am.setUser(ss[0]);
                am.setSecurityEntity(ss[1]);
                am.setPremit(ss[2]);
                col.add(am);
            }
        }

        return col;
    }

}
